Problem 1 |
circuit_city > Modify the circuit_city.sql file to create the table ord_det_copy as shown. Then, write a SQL command to copy the rows from the ord_det table to the ord_det_copy by combining the SELECT and INSERT verbs; first use INSERT and replace the VALUES part of the INSERT with a SELECT. Using: (a) Oracle. (b) Microsoft SQL Server. Modifique el archivo circuit_city.sql para crear la tabla ord_det_copy como se muestra. Entonces, escriba un comando SQL para copiar todos los renglones de la tabla ord_det a la tabla ord_det_copy combinando los verbos SELECT e INSERT; primero use INSERT y reemplace la parte VALUES del INSERT con un SELECT. Usando: (a) Oracle. (b) Microsoft SQL Server. |
circuit_city.sql |
CREATE TABLE ord_det_copy ( order_id INT NOT NULL REFERENCES orderx(order_id), item_id INT NOT NULL REFERENCES item(item_id), item_count INT NOT NULL, PRIMARY KEY (order_id, item_id) ); |
MSDOS: cmd.exe |
SQL> SELECT order_id, 2 item_id, 3 item_count 4 FROM ord_det_copy; ORDER_ID ITEM_ID ITEM_COUNT ---------- ---------- ---------- 2000 100 4 2000 104 5 2001 105 1 2001 106 3 2001 109 2 2002 103 2 2002 102 5 2002 110 4 2002 111 12 2003 107 5 2004 103 2 2004 104 2 2005 102 2 13 rows selected. |
Microsoft SQL Server |
SELECT order_id, item_id, item_count FROM ord_det_copy; |
Tip |
BEGIN TRANSACTION (SAVEPOINT BEGIN TRANSACTION (SAVEPOINT |
Problem 2 |
circuit_city > Create a stored procedure called p_close_month to move permanently the rows from the ord_det table to the ord_det_copy table (first, empty the ord_det_copy table, then move the data from table to the other). Use the commands BEGIN TRANSACTION, ROLLBACK, COMMIT TRANSACTION, and the @@ROWCOUNT variable. Use Microsoft SQL Server. Observe that this store procedure requires to use the BEGIN TRANSACTION command because it has two steps:
Cree un procedimiento almacenado llamado p_close_month para mover en forma permanente los renglones de la tabla ord_det a la tabla ord_det_copy (primero, remueva todos los renglones de la tabla ord_det_copy, entonces mueve los datos). Use los comandos: BEGIN TRANSACTION, ROLLBACK, COMMIT TRANSACTION y la variable @@ROWCOUNT. Use Microsoft SQL Server. Observe que en este procedimiento almacenado se necesita usar el comando BEGIN TRANSACTION porque este tiene dos pasos:
|
Microsoft SQL Server |
SELECT order_id, item_id, item_count FROM ord_det; |
Microsoft SQL Server |
USE circuit_city; DELETE FROM ord_det_copy; EXECUTE p_close_month; SELECT order_id, item_id, item_count FROM ord_det; |
Microsoft SQL Server |
SELECT order_id, item_id, item_count FROM ord_det_copy; |
Problem 3 |
circuit_city > The owner of the store has decided to give a free item of the same type for those orders which have more than four of those items. Test the p_gratis stored procedure in Oracle. El propietario de Circuit City ha decidido dar un artículo gratis en aquellas órdenes que tengan más de 4 artículos del mismo tipo. El artículo de regalo debe ser de este último tipo. Pruebe el procedimiento almacenado p_gratis en Oracle. |
MSDOS: cmd.exe |
SQL> EXECUTE p_gratis; PL/SQL procedure successfully completed. SQL> SELECT order_id, 2 item_id, 3 item_count 4 FROM ord_det_copy; ORDER_ID ITEM_ID ITEM_COUNT ---------- ---------- ---------- 2000 100 4 2000 104 6 2001 105 1 2001 106 3 2001 109 2 2002 103 2 2002 102 6 2002 110 4 2002 111 13 2003 107 6 2004 103 2 2004 104 2 2005 102 2 13 rows selected. |
Problem 4 |
circuit_city > Repeat the previous problem using Microsoft SQL Server, do not forget to remove the READ_ONLY property from the CURSOR. Repita el problema anterior usando Microsoft SQL Server, no se olvide de remover la propiedad READ_ONLY del CURSOR. |
Microsoft SQL Server |
USE circuit_city; EXECUTE p_gratis; |
Microsoft SQL Server |
SELECT order_id, item_id, item_count FROM ord_det_copy; |